﻿Imports System.Data
Imports System.Data.SqlClient

Imports BE = BusinessEntities

Public Class ProyectoDAO
    'Declaración de variables
    Dim conexion As SqlConnection
    Dim da As SqlDataAdapter
    Dim str_error As String
    Dim bool_resultado As Boolean
    Dim cmd As SqlCommand

    'Instanciamos la clase Conexion.vb
    Dim cn As New Conexion

    Public Function ListarProyectosEtapas() As DataSet
        Dim ds As New DataSet
        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("pr_listarProyectosEtapas", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            'Llenamos el dataset
            da.Fill(ds, "proyectos")

        Catch ex As Exception
            str_error = ex.Message
        Finally
            'Liberamos recursos
            conexion.Dispose()
            ds.Dispose()
            da.Dispose()
        End Try

        Return ds

    End Function

    Public Function ListarProyectos() As DataSet
        Dim ds As New DataSet
        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_LISTARPROYECTOS", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            'Llenamos el dataset
            da.Fill(ds, "proyectos")

        Catch ex As Exception
            str_error = ex.Message
        Finally
            'Liberamos recursos
            conexion.Dispose()
            ds.Dispose()
            da.Dispose()
        End Try

        Return ds

    End Function
    'Public Function DATA_REQUESICION(ByVal objeto As BE.ProyectoDTO) As DataSet
    '    Dim ds As New DataSet
    '    Try
    '        conexion = cn.Conectar
    '        da = New SqlDataAdapter("SP_DATA_REQUESICION", conexion)
    '        'Indicamos que el comando de base de datos es un stored procedure
    '        da.SelectCommand.CommandType = CommandType.StoredProcedure

    '        'Definimos el parámetro
    '        da.SelectCommand.Parameters.Add _
    '        (New SqlParameter("@COD_PRY", SqlDbType.Int))

    '        da.SelectCommand.Parameters("@COD_PRY").Direction = ParameterDirection.Input
    '        'da.SelectCommand.Parameters("@vc_razon").Value = razon
    '        da.SelectCommand.Parameters("@COD_PRY").Value = objeto.CodigoProyecto

    '        'Llenamos el dataset
    '        da.Fill(ds, "DATA_REQUISICION")

    '    Catch ex As Exception
    '        str_error = ex.Message
    '    Finally
    '        'Liberamos recursos
    '        conexion.Dispose()
    '        ds.Dispose()
    '        da.Dispose()
    '    End Try

    '    Return ds

    'End Function

    Public Function CapturaError() As String
        Return str_error
    End Function

    Public Function InsertarProyecto(ByVal objeto As BE.ProyectoDTO) As Boolean

        'Instanciamos la clase conexion
        Dim cn As New Conexion
        Try
            conexion = cn.Conectar

            cmd = New SqlCommand("SP_INSERT_PROYECTOS", conexion)

            cmd.CommandType = CommandType.StoredProcedure

            'Definimos los parámetros de entrada
            cmd.Parameters.Add(New SqlParameter("@NOM_PRY", SqlDbType.VarChar, 50))
            cmd.Parameters("@NOM_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@NOM_PRY").Value = objeto.NombreProyecto

            cmd.Parameters.Add(New SqlParameter("@COD_DEP", SqlDbType.Char, 2))
            cmd.Parameters("@COD_DEP").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_DEP").Value = objeto.CodDepartamento

            cmd.Parameters.Add(New SqlParameter("@COD_PROV", SqlDbType.Char, 2))
            cmd.Parameters("@COD_PROV").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_PROV").Value = objeto.CodProvincia

            cmd.Parameters.Add(New SqlParameter("@COD_DIST", SqlDbType.Char, 2))
            cmd.Parameters("@COD_DIST").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_DIST").Value = objeto.CodDistrito

            cmd.Parameters.Add(New SqlParameter("@CST_PRY", SqlDbType.Decimal, 10))
            cmd.Parameters("@CST_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@CST_PRY").Value = objeto.CostoProyecto

            cmd.Parameters.Add(New SqlParameter("@TIEMPO_PRY", SqlDbType.SmallInt))
            cmd.Parameters("@TIEMPO_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@TIEMPO_PRY").Value = objeto.TiempoProyecto

            cmd.Parameters.Add(New SqlParameter("@OBS_PRY", SqlDbType.VarChar, 100))
            cmd.Parameters("@OBS_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@OBS_PRY").Value = objeto.ObservacionProyecto

            cmd.Parameters.Add(New SqlParameter("@PLAN_PRY", SqlDbType.VarChar, 100))
            cmd.Parameters("@PLAN_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@PLAN_PRY").Value = objeto.PlanProyecto

            cmd.Parameters.Add(New SqlParameter("@COD_ETA_PRY", SqlDbType.Int))
            cmd.Parameters("@COD_ETA_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_ETA_PRY").Value = objeto.CodigoEtapaProyecto

            cmd.Parameters.Add(New SqlParameter("@COD_PRY_EST", SqlDbType.Int))
            cmd.Parameters("@COD_PRY_EST").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_PRY_EST").Value = objeto.CodigoProyectoEstado

            conexion.Open()

            cmd.ExecuteNonQuery()
            bool_resultado = True

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            cmd.Dispose()
            cn = Nothing

        End Try

        Return bool_resultado

    End Function


    Public Function EliminarProyecto(ByVal objeto As BE.ProyectoDTO) As Boolean
        'Instanciamos la clase conexion
        Dim cn As New Conexion
        Try

            conexion = cn.Conectar

            cmd = New SqlCommand("pr_eliminarPROYECTO", conexion)

            cmd.CommandType = CommandType.StoredProcedure

            'Definimos el parámetro de entrada
            cmd.Parameters.Add(New SqlParameter("@vc_codigo", SqlDbType.Int))
            cmd.Parameters("@vc_codigo").Direction = ParameterDirection.Input
            cmd.Parameters("@vc_codigo").Value = objeto.CodigoProyecto

            conexion.Open()

            cmd.ExecuteNonQuery()
            bool_resultado = True


        Catch ex As Exception

            bool_resultado = False
            str_error = ex.Message

        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            cmd.Dispose()
            cn = Nothing

        End Try

        Return bool_resultado

    End Function

    Public Function DatosProyecto(ByVal objeto As BE.ProyectoDTO) As DataSet

        Dim ds As New DataSet

        Try

            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_OBTENER_PROYECTO", conexion)
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            da.SelectCommand.Parameters.Add _
            (New SqlParameter("@cod", SqlDbType.Int))

            da.SelectCommand.Parameters("@cod").Direction = ParameterDirection.Input

            da.SelectCommand.Parameters("@cod").Value = objeto.CodigoProyecto

            'Llenamos el dataset
            da.Fill(ds, "DatosProyecto")

        Catch ex As Exception
            str_error = ex.Message
        Finally
            'Destruimos los objetos
            conexion.Dispose()
            da.Dispose()
            ds.Dispose()
        End Try

        Return ds

    End Function

    Public Function getEtapas() As DataSet
        Dim cn As New Conexion
        Dim ds As New DataSet
        Dim da As SqlDataAdapter

        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_ETAPASPROYECTO", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            'Llenamos el dataset
            da.Fill(ds, "proyectos")



        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            ' cmd.Dispose()
            cn = Nothing
        End Try

        Return ds

    End Function

    Public Function getEstado() As DataSet
        Dim cn As New Conexion
        Dim ds As New DataSet

        Try

            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_ESTADOSPROYECTO", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            'Llenamos el dataset
            da.Fill(ds, "proyectos")

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            '  cmd.Dispose()
            cn = Nothing
        End Try

        Return ds

    End Function

    Public Function ActualizarProyecto(ByVal objeto As BE.ProyectoDTO) As Boolean

        'Instanciamos la clase conexion
        Dim cn As New Conexion
        Try
            conexion = cn.Conectar

            cmd = New SqlCommand("SP_ACTUALIZAR_PROYECTO", conexion)
            cmd.CommandType = CommandType.StoredProcedure

            'Definimos los parámetros de entrada

            cmd.Parameters.Add(New SqlParameter("@COD_PRY", SqlDbType.Int))
            cmd.Parameters("@COD_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_PRY").Value = objeto.CodigoProyecto

            cmd.Parameters.Add(New SqlParameter("@NOM_PRY", SqlDbType.VarChar, 50))
            cmd.Parameters("@NOM_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@NOM_PRY").Value = objeto.NombreProyecto

            cmd.Parameters.Add(New SqlParameter("@COD_DEP", SqlDbType.Char, 2))
            cmd.Parameters("@COD_DEP").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_DEP").Value = objeto.CodDepartamento

            cmd.Parameters.Add(New SqlParameter("@COD_PROV", SqlDbType.Char, 2))
            cmd.Parameters("@COD_PROV").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_PROV").Value = objeto.CodProvincia

            cmd.Parameters.Add(New SqlParameter("@COD_DIST", SqlDbType.Char, 2))
            cmd.Parameters("@COD_DIST").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_DIST").Value = objeto.CodDistrito

            cmd.Parameters.Add(New SqlParameter("@CST_PRY", SqlDbType.Decimal, 10))
            cmd.Parameters("@CST_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@CST_PRY").Value = objeto.CostoProyecto

            cmd.Parameters.Add(New SqlParameter("@TIEMPO_PRY", SqlDbType.SmallInt))
            cmd.Parameters("@TIEMPO_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@TIEMPO_PRY").Value = objeto.TiempoProyecto

            cmd.Parameters.Add(New SqlParameter("@OBS_PRY", SqlDbType.VarChar, 100))
            cmd.Parameters("@OBS_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@OBS_PRY").Value = objeto.ObservacionProyecto

            cmd.Parameters.Add(New SqlParameter("@PLAN_PRY", SqlDbType.VarChar, 100))
            cmd.Parameters("@PLAN_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@PLAN_PRY").Value = objeto.PlanProyecto

            cmd.Parameters.Add(New SqlParameter("@COD_ETA_PRY", SqlDbType.Int))
            cmd.Parameters("@COD_ETA_PRY").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_ETA_PRY").Value = objeto.CodigoEtapaProyecto

            cmd.Parameters.Add(New SqlParameter("@COD_PRY_EST", SqlDbType.Int))
            cmd.Parameters("@COD_PRY_EST").Direction = ParameterDirection.Input
            cmd.Parameters("@COD_PRY_EST").Value = objeto.CodigoProyectoEstado

            conexion.Open()

            cmd.ExecuteNonQuery()

            bool_resultado = True

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            cmd.Dispose()
            cn = Nothing

        End Try

        Return bool_resultado

    End Function

    Public Function getPlanProyecto(ByVal cod As Integer) As String
        Dim da As SqlCommand = Nothing
        Dim rpta As String = ""

        Try

            conexion = cn.Conectar
            da = New SqlCommand("select plan_pry from tb_proyectos " + _
                                    " where cod_pry=@cod", conexion)

            da.CommandType = CommandType.Text

            da.Parameters.Add(New SqlParameter("@cod", SqlDbType.Int))
            da.Parameters("@cod").Direction = ParameterDirection.Input
            da.Parameters("@cod").Value = cod

            conexion.Open()
            'Llenamos el dataset
            rpta = da.ExecuteScalar()

        Catch ex As Exception
            str_error = ex.Message
        Finally
            'Destruimos los objetos
            conexion.Dispose()
            da.Dispose()
        End Try

        Return rpta

    End Function

    Public Function getDepartamentos() As DataSet
        Dim cn As New Conexion
        Dim ds As New DataSet

        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_DEPARTAMENTOS", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            'Llenamos el dataset
            da.Fill(ds, "departamentos")

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            '  cmd.Dispose()
            cn = Nothing
        End Try

        Return ds

    End Function

    Function getProvincias() As DataSet

        Dim cn As New Conexion
        Dim ds As New DataSet

        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("select * from tb_provincia", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.Text

            'Llenamos el dataset
            da.Fill(ds, "provincias")

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            '  cmd.Dispose()
            cn = Nothing
        End Try

        Return ds
    End Function

    Function getDistritos() As DataSet
        Dim cn As New Conexion
        Dim ds As New DataSet

        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("select * from tb_distrito", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.Text

            'Llenamos el dataset
            da.Fill(ds, "distritos")

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            '  cmd.Dispose()
            cn = Nothing
        End Try

        Return ds
    End Function

    Public Function getProvincias(ByVal cod As String) As DataSet
        Dim cn As New Conexion
        Dim ds As New DataSet

        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_PROVINCIAS", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            da.SelectCommand.Parameters.Add("@cod", SqlDbType.Char, 2).Value = cod

            'Llenamos el dataset
            da.Fill(ds, "provincias")

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            '  cmd.Dispose()
            cn = Nothing
        End Try

        Return ds

    End Function

    Public Function getDistritos(ByVal cod As String) As DataSet
        Dim cn As New Conexion
        Dim ds As New DataSet

        Try
            conexion = cn.Conectar
            da = New SqlDataAdapter("SP_DISTRITOS", conexion)
            'Indicamos que el comando de base de datos es un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure

            da.SelectCommand.Parameters.Add("@cod", SqlDbType.Char, 3).Value = cod

            'Llenamos el dataset
            da.Fill(ds, "distritos")

        Catch ex As Exception
            bool_resultado = False
            str_error = ex.Message
        Finally

            If conexion.State = ConnectionState.Open Then conexion.Close()
            conexion.Dispose()
            '  cmd.Dispose()
            cn = Nothing
        End Try

        Return ds

    End Function

    Public Function PresupuestoxProyecto() As DataSet
        Dim ds As New DataSet
        Try
            'Hacemos uso del método Conectar de la clase Conexion
            conexion = cn.Conectar
            da = New SqlDataAdapter("USP_REPORTE", conexion)
            'Indicamos el tipo de comando, en este caso un stored procedure
            da.SelectCommand.CommandType = CommandType.StoredProcedure
            'Llenamos el dataset
            da.Fill(ds, "Productos")

        Catch ex As Exception
            str_error = ex.Message
        Finally
            'Liberamos recursos
            conexion.Dispose()
            da.Dispose()
            ds.Dispose()
        End Try
        'Retornamos datos
        Return ds


    End Function
End Class
